package managedbeans;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import entidades.Usuario;
import usuarioejb.UsuarioEJBRemote;

/**
 * Este es el manage bean de la clase usuario.
 * @author Fernando
 *
 */


@ManagedBean (name = "MBUser")
@SessionScoped
public class MBUser implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    /**
     * Este atributo sirve para poder trabajar con la EJB.
     */
    @EJB (name = "UEJB", mappedName = "UEJB")
    UsuarioEJBRemote uejb;
    
    /**
     * Este atributo sirve para poder trabajar con el MB de carro.
     */
    @ManagedProperty(value = "#{MBCarro}")
    MBCarro mbcarro;
    
    
    private String user;
    private String name;
    private String lastName;
    private String pass;
    private String passconfirm;
    private Usuario usuario;
    private List<Usuario> ListU;
    private int count;
    
    @PostConstruct
    public void init(){
        usuario = new Usuario();
        setCount(5);
    }

    public MBUser(){
        
    }
    
    
    /**
     * checkea si el usuario ya existe en la BD, si no existe
     * lo registra en la BD
     */
    public String regUser(){
            Usuario checkUser = uejb.obtenerUser(usuario.getUsername());
            if (checkUser == null){
            uejb.addUser(usuario);
            init();
            return "regsuccesful";
            } else {
            return "register";    
            }
         
    }

    
    
    /**este es el metodo de login, checkea dentro de la base de datos
     * si existe primero el user, si existe ese username, entonces
     *  compara la pass obtenida con la pass en la BD 
     */
    public String loginUser(){
        Usuario checkUser = uejb.obtenerUser(usuario.getUsername());
        if (checkUser == null){
            return "loginfailed";
        } else {
            if (checkUser.getPassUser().equals(usuario.getPassUser())){
                usuario = checkUser;
                return "loginsuccesful";
            } else {
                return "loginfailed";
            }
        }
    }
       
    /**Envia la informacion del nombre del usuario al MB de carro
     * y luego redirige a la pagina de inicio
     */
    public String sendInfo(){
        mbcarro.getCarro().setUsuario(usuario.getUsername());
        mbcarro.setUsuario(usuario.getNombreUser());
        mbcarro.addNombreUser();
        return "index";
    }

    /**
     * Redirige a la pagina de index
     * @return String "index"
     */
    public String redirectIndex(){
        return "index";
    }

    /**
     * @return the uejb
     */
    public UsuarioEJBRemote getUejb() {
        return uejb;
    }

    /**
     * @param uejb the uejb to set
     */
    public void setUejb(UsuarioEJBRemote uejb) {
        this.uejb = uejb;
    }

    /**
     * @return the mbcarro
     */
    public MBCarro getMbcarro() {
        return mbcarro;
    }

    /**
     * @param mbcarro the mbcarro to set
     */
    public void setMbcarro(MBCarro mbcarro) {
        this.mbcarro = mbcarro;
    }

    /**
     * @return the user
     */
    public String getUser() {
        return user;
    }

    /**
     * @param user the user to set
     */
    public void setUser(String user) {
        this.user = user;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the lastName
     */
    public String getLastName() {
        return lastName;
    }

    /**
     * @param lastName the lastName to set
     */
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    /**
     * @return the pass
     */
    public String getPass() {
        return pass;
    }

    /**
     * @param pass the pass to set
     */
    public void setPass(String pass) {
        this.pass = pass;
    }

    /**
     * @return the passconfirm
     */
    public String getPassconfirm() {
        return passconfirm;
    }

    /**
     * @param passconfirm the passconfirm to set
     */
    public void setPassconfirm(String passconfirm) {
        this.passconfirm = passconfirm;
    }

    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the listU
     */
    public List<Usuario> getListU() {
        return ListU;
    }

    /**
     * @param listU the listU to set
     */
    public void setListU(List<Usuario> listU) {
        ListU = listU;
    }

    /**
     * @return the count
     */
    public int getCount() {
        return count;
    }

    /**
     * @param count the count to set
     */
    public void setCount(int count) {
        this.count = count;
    }

    /**
     * @return the serialversionuid
     */
    public static long getSerialversionuid() {
        return serialVersionUID;
    }
    
}
